using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using APP.QUANLY.Entity;
using APP.QUANLY.DAL;
using APP.QUANLY.Entity.ConditionForm;
using APP.QUANLY.Common;

namespace APP.QUANLY.Provider
{
    public class TEMP_HOADONHAPKHOCHITIET_Provider
    {
        public IDbConnection dbConnection;
        private string _ErrMsg;
        public string ErrMsg { get { return _ErrMsg; } }
	
        public TEMP_HOADONHAPKHOCHITIET_Provider()
        {
            dbConnection = StaticVar.ServerConnection;
        }
	
        public TEMP_HOADONHAPKHOCHITIET_Provider(IDbConnection con)
        {
            dbConnection = con;
        }
		#region Load Table
        /// <summary>
        /// Lấy tất cả TEMP_HOADONHAPKHOCHITIET trong dữ liệu.
        /// </summary>
        /// <returns></returns>
         public TEMP_HOADONHAPKHOCHITIETList GetAll()
        {
            TEMP_HOADONHAPKHOCHITIETList list = null;
            IDbConnection con = dbConnection;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open(); }
                catch{ throw new Exception("Không thể kết nối đến cơ sở dữ liệu");}
                TEMP_HOADONHAPKHOCHITIETDao dao = new TEMP_HOADONHAPKHOCHITIETDao(con);
                list = dao.SelectAll();
            }
            catch (Exception ex)
            {
                list = null;
                _ErrMsg = ex.Message;
            }
            finally
            {
                if (con.State != ConnectionState.Closed) { con.Close(); }
            }
            return list;
        }
        
        /// <summary>
        /// Tìm TEMP_HOADONHAPKHOCHITIET dựa theo _MACHITIETHOADON.
        /// </summary>
        /// <param name="_MACHITIETHOADON"></param>
        /// <returns></returns>
        public TEMP_HOADONHAPKHOCHITIET GetBy_MACHITIETHOADON(string MACHITIETHOADON)
        {
            TEMP_HOADONHAPKHOCHITIET obj = null;
            IDbConnection con = dbConnection;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open();  }
                catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
				obj = GetTEMP_HOADONHAPKHOCHITIET_NoOpenConnection(con,MACHITIETHOADON);
                if (obj == null) { throw new Exception("TEMP_HOADONHAPKHOCHITIET không tồn tại"); }
				else obj.IsExisting = true;
            }
            catch (Exception ex)
            {
                obj = null;
                _ErrMsg = ex.Message;
            }
            finally
            {
                if (con.State != ConnectionState.Closed) { con.Close(); }
            }
            return obj;
        }

		/// <summary>
        /// Lấy TEMP_HOADONHAPKHOCHITIET dựa vào _MACHITIETHOADON, không mở hay đóng Connection. khong co Transaction
        /// </summary>
        /// <param name="_MACHITIETHOADON"></param>
        /// <returns></returns>
        private TEMP_HOADONHAPKHOCHITIET GetTEMP_HOADONHAPKHOCHITIET_NoOpenConnection(IDbConnection con,string MACHITIETHOADON)
        {
			TEMP_HOADONHAPKHOCHITIET obj = null;
			try
			{
            	TEMP_HOADONHAPKHOCHITIETDao DAO = new TEMP_HOADONHAPKHOCHITIETDao(con);
            	obj = DAO.SelectByKey(MACHITIETHOADON);
			}
			catch
			{
				throw new Exception("Không tìm thấy TEMP_HOADONHAPKHOCHITIET.");
				obj = null;
			}
			return obj;
        }
		
		/// <summary>
        /// Lấy TEMP_HOADONHAPKHOCHITIET dựa vào _MACHITIETHOADON, không mở hay đóng Connection. co Transaction
        /// </summary>
        /// <param name="_MACHITIETHOADON"></param>
        /// <returns></returns>
		private TEMP_HOADONHAPKHOCHITIET GetTEMP_HOADONHAPKHOCHITIET_NoOpenConnection(IDbConnection con,string MACHITIETHOADON, IDbTransaction trans)
        {
			TEMP_HOADONHAPKHOCHITIET obj = null;
			try
			{
            	TEMP_HOADONHAPKHOCHITIETDao DAO = new TEMP_HOADONHAPKHOCHITIETDao(con);
            	obj = DAO.SelectByKey(MACHITIETHOADON, trans);
			}
			catch
			{
				throw new Exception("Không tìm thấy TEMP_HOADONHAPKHOCHITIET.");
				obj = null;
			}
			return obj;
        }
		#endregion
		
		#region /////////////////////////////////Load Cau Lenh SQL Command //////////////////////////////////////
        //--------------------------------------Load List---------------------------------------------------------
         private bool loadList(IDbConnection con, string commandtext)
         {
            IDbTransaction trans = null;
            bool res;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open();  }
                catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
				
                trans = con.BeginTransaction();
				TEMP_HOADONHAPKHOCHITIETDao dao = new TEMP_HOADONHAPKHOCHITIETDao(con);
                dao.LoadByCommandText(commandtext, trans);
                trans.Commit();
                res = true;
            }
            catch (Exception ex)
            {
                _ErrMsg = ex.Message;
				if(trans!=null)
					trans.Rollback();
                res = false;
            }
            finally
            {
                if (con.State != ConnectionState.Closed) { con.Close(); }
            }
            return res;	
        }	
		//----------------------------------Thao Tac Theo Command Text---------------------------------------
        public bool Cmd_LoadByCommandText(string commandtext)
        {
			bool bKQ = false;
			bKQ = loadList(dbConnection, commandtext);
			if(bKQ) _ErrMsg ="LoadByCommandText  thành công!";
			else  _ErrMsg ="LoadByCommandText  thất bại!";    
			return bKQ;
        }
		#endregion
		
        #region ////////////////////////Thao tác Insert, Update, Delete khong có transaction/////////////////////
        //-------------------------------------Insert_Update-----------------------------------------------------
        private bool Insert_Update(IDbConnection con, TEMP_HOADONHAPKHOCHITIET obj, bool isInsert)
        {
            TEMP_HOADONHAPKHOCHITIET obj2 = null;
            IDbTransaction trans = null;
            bool res;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open();  }
                catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
				try
				{ 
					obj2 = GetTEMP_HOADONHAPKHOCHITIET_NoOpenConnection(con, obj.MACHITIETHOADON);
				}
				catch{ obj2 = null; }

                TEMP_HOADONHAPKHOCHITIETDao dao = new TEMP_HOADONHAPKHOCHITIETDao(con);
                trans = con.BeginTransaction();
                ///Nếu Insert
                if (isInsert)
                {
                    if (obj2 != null) { throw new Exception("TEMP_HOADONHAPKHOCHITIET này đã tồn tại"); }
					{
                    	dao.Insert(obj, trans);
					}
                }
                ///Nếu Update
                else
                {
                    if (obj2 == null) { throw new Exception("TEMP_HOADONHAPKHOCHITIET này không tồn tại"); }
					{
                    	dao.Update(obj, trans);
					}
                }
                trans.Commit();
                res = true;
			}
            catch (Exception ex)
            {
                _ErrMsg = ex.Message;
				if(trans!=null)
					trans.Rollback();
                res = false;
            }
            finally
            {
                if (con.State != ConnectionState.Closed) { con.Close(); }
            }
            return res;
        }

        //----------------------------------Delete---------------------------------
        private bool Delete(IDbConnection con, TEMP_HOADONHAPKHOCHITIET obj)
        {
            TEMP_HOADONHAPKHOCHITIET obj2 = null;
            IDbTransaction trans = null;
            bool res;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open();  }
                catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
				try
				{ 
					obj2 = GetTEMP_HOADONHAPKHOCHITIET_NoOpenConnection(con, obj.MACHITIETHOADON);
				}
				catch{ obj2 = null; }

                TEMP_HOADONHAPKHOCHITIETDao dao = new TEMP_HOADONHAPKHOCHITIETDao(con);
                trans = con.BeginTransaction();
               	if (obj2 == null) { throw new Exception("TEMP_HOADONHAPKHOCHITIET này không tồn tại"); }
                      dao.Delete(obj, trans);
                trans.Commit();
                res = true;
            }
            catch (Exception ex)
            {
                _ErrMsg = ex.Message;
				if(trans!=null)
					trans.Rollback();
                res = false;
            }
            finally
            {
                if (con.State != ConnectionState.Closed) { con.Close(); }
            }
            return res;
        }

        //----------------------------------------Thêm------------------------------------------------------------
        /// <summary>
        /// Thêm TEMP_HOADONHAPKHOCHITIET mới, dựa vào _MACHITIETHOADON
        /// </summary>
        /// <param name="TEMP_HOADONHAPKHOCHITIET"></param>
        /// <returns></returns>
        public bool Cmd_ThemTEMP_HOADONHAPKHOCHITIET(TEMP_HOADONHAPKHOCHITIET obj)
        {
			bool bKQ = false;
			bKQ = Insert_Update(dbConnection, obj, true);
			if(bKQ) _ErrMsg ="Thêm TEMP_HOADONHAPKHOCHITIET thành công!";
			else  _ErrMsg ="Thêm TEMP_HOADONHAPKHOCHITIET thất bại!";    
            return bKQ; 
        }

        //---------------------------------------------Cập Nhật--------------------------------------------------
        /// <summary>
        /// Cập nhật TEMP_HOADONHAPKHOCHITIET, dựa vào _MACHITIETHOADON
        /// </summary>
        /// <param name="TEMP_HOADONHAPKHOCHITIET"></param>
        /// <returns></returns>
        public bool Cmd_CapNhatTEMP_HOADONHAPKHOCHITIET(TEMP_HOADONHAPKHOCHITIET obj)
        {
			bool bKQ = false;
			bKQ = Insert_Update(dbConnection, obj, false);
			if(bKQ) _ErrMsg ="Cập nhật TEMP_HOADONHAPKHOCHITIET thành công!";
			else  _ErrMsg ="Cập nhật TEMP_HOADONHAPKHOCHITIET thất bại!";    
            return bKQ;
        }
        //-------------------------------------------Xóa-------------------------------------------------
        /// <summary>
        /// Xóa TEMP_HOADONHAPKHOCHITIET, dựa vào _MACHITIETHOADON
        /// </summary>
        /// <param name="TEMP_HOADONHAPKHOCHITIET"></param>
        /// <returns></returns>
        public bool Cmd_XoaTEMP_HOADONHAPKHOCHITIET(TEMP_HOADONHAPKHOCHITIET obj)
        {
			bool bKQ = false;
			bKQ = Delete(dbConnection, obj);
			if(bKQ) _ErrMsg ="Xóa TEMP_HOADONHAPKHOCHITIET thành công!";
			else  _ErrMsg ="Xóa TEMP_HOADONHAPKHOCHITIET thất bại!";    
            return bKQ;
        }
		#endregion
		
		#region ///////////////////////////////Tim Kiem////////////////////////////////////////////////////////
        //----------------------------------Tìm Kiếm List Theo Điều Kiện---------------------------------------
        /// <summary>
        /// Tìm Kiếm  TEMP_HOADONHAPKHOCHITIET, dựa vào ConditionForm
        /// </summary>
        /// <param name="TEMP_HOADONHAPKHOCHITIET"></param>
        /// <returns></returns>
        public TEMP_HOADONHAPKHOCHITIETList SearchListByCondition(TEMP_HOADONHAPKHOCHITIETConditionForm form)
        {
            IDbConnection con = dbConnection;
            try { if (con.State != ConnectionState.Open)  con.Open();  }
            catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
            TEMP_HOADONHAPKHOCHITIETList list = null;
            try
            {
                if (con.State != ConnectionState.Open)  con.Open(); 
                TEMP_HOADONHAPKHOCHITIETDao dao = new TEMP_HOADONHAPKHOCHITIETDao(con);
                list = dao.SelectByCondition(form);
            }
            catch (Exception ex)
            {
                list = null;
                _ErrMsg = ex.Message;
            }
            finally
            {
                if (con.State != ConnectionState.Closed) con.Close(); 
            }
            return list;
        }
        //----------------------------------Tìm Kiếm Object Theo Điều Kiện---------------------------------------
        /// <summary>
        /// Tìm Kiếm  TEMP_HOADONHAPKHOCHITIET, dựa vào ConditionForm
        /// </summary>
        /// <param name="TEMP_HOADONHAPKHOCHITIET"></param>
        /// <returns></returns>
        public TEMP_HOADONHAPKHOCHITIET SearchObjectByCondition(TEMP_HOADONHAPKHOCHITIETConditionForm form)
        {
            IDbConnection con = dbConnection;
            try { if (con.State != ConnectionState.Open)  con.Open();  }
            catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
            TEMP_HOADONHAPKHOCHITIETList list = null;
            try
            {
                if (con.State != ConnectionState.Open)  con.Open(); 
                TEMP_HOADONHAPKHOCHITIETDao dao = new TEMP_HOADONHAPKHOCHITIETDao(con);
                list = dao.SelectByCondition(form);
            }
            catch (Exception ex)
            {
                list = null;
                _ErrMsg = ex.Message;
            }
            finally
            {
                if (con.State != ConnectionState.Closed) con.Close(); 
            }
            return list[0];
        }
		#endregion
		
        #region ///////////////////Thao tác Insert, Update, Delete có transaction////////////////////////////
        private bool Insert_Update(IDbConnection con,  IDbTransaction trans, TEMP_HOADONHAPKHOCHITIET obj, bool isInsert)
        {
            TEMP_HOADONHAPKHOCHITIET obj2 = null;
            bool res;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open();  }
                catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
				try
				{ 
					obj2 = GetTEMP_HOADONHAPKHOCHITIET_NoOpenConnection(con, obj.MACHITIETHOADON, trans);
				}
				catch{ obj2 = null; }

                TEMP_HOADONHAPKHOCHITIETDao dao = new TEMP_HOADONHAPKHOCHITIETDao(con);
                ///Nếu Insert
                if (isInsert)
                {
                    if (obj2 != null) { throw new Exception("TEMP_HOADONHAPKHOCHITIET này đã tồn tại"); }
					{
                    	dao.Insert(obj, trans);
					}
                }
                ///Nếu Update
                else
                {
                    if (obj2 == null) { throw new Exception("TEMP_HOADONHAPKHOCHITIET này không tồn tại"); }
					{
                    	dao.Update(obj, trans);
					}
                }
                res = true;
			}
            catch (Exception ex)
            {
                _ErrMsg = ex.Message;
				res = false;
            }
            return res;
        }

        //----------------------------------Delete---------------------------------
        private bool Delete(IDbConnection con,  IDbTransaction trans, TEMP_HOADONHAPKHOCHITIET obj)
        {
            TEMP_HOADONHAPKHOCHITIET obj2 = null;

            bool res;
            try
            {
                try { if (con.State != ConnectionState.Open)  con.Open();  }
                catch{throw new Exception("Không thể kết nối đến cơ sở dữ liệu"); }
				try
				{ 
					obj2 = GetTEMP_HOADONHAPKHOCHITIET_NoOpenConnection(con, obj.MACHITIETHOADON, trans);
				}
				catch{ obj2 = null; }

                TEMP_HOADONHAPKHOCHITIETDao dao = new TEMP_HOADONHAPKHOCHITIETDao(con);
               	if (obj2 == null) { throw new Exception("TEMP_HOADONHAPKHOCHITIET này không tồn tại"); }
                dao.Delete(obj, trans);
                res = true;
            }
            catch (Exception ex)
            {
                _ErrMsg = ex.Message;
                res = false;
            }
            return res;
        }
		
        //----------------------------------------Thêm------------------------------------------------------------
        /// <summary>
        /// Thêm TEMP_HOADONHAPKHOCHITIET mới, dựa vào _MACHITIETHOADON
        /// </summary>
        /// <param name="TEMP_HOADONHAPKHOCHITIET"></param>
		/// <param name="IDbTransaction"></param>
        /// <returns></returns>
        public bool Cmd_ThemTEMP_HOADONHAPKHOCHITIET(TEMP_HOADONHAPKHOCHITIET obj, IDbTransaction trans)
        {
			bool bKQ = false;
			bKQ = Insert_Update(dbConnection, trans, obj, true);
			if(bKQ) _ErrMsg ="Thêm TEMP_HOADONHAPKHOCHITIET thành công!";
			else  _ErrMsg ="Thêm TEMP_HOADONHAPKHOCHITIET thất bại!";    
            return bKQ; 
        }

        //---------------------------------------------Cập Nhật--------------------------------------------------
        /// <summary>
        /// Cập nhật TEMP_HOADONHAPKHOCHITIET, dựa vào _MACHITIETHOADON
        /// </summary>
        /// <param name="TEMP_HOADONHAPKHOCHITIET"></param>
        /// <returns></returns>
        public bool Cmd_CapNhatTEMP_HOADONHAPKHOCHITIET(TEMP_HOADONHAPKHOCHITIET obj, IDbTransaction trans)
        {
			bool bKQ = false;
			bKQ = Insert_Update(dbConnection, trans, obj, false);
			if(bKQ) _ErrMsg ="Cập nhật TEMP_HOADONHAPKHOCHITIET thành công!";
			else  _ErrMsg ="Cập nhật TEMP_HOADONHAPKHOCHITIET thất bại!";    
            return bKQ;
        }
        //-------------------------------------------Xóa-------------------------------------------------
        /// <summary>
        /// Xóa TEMP_HOADONHAPKHOCHITIET, dựa vào _MACHITIETHOADON
        /// </summary>
        /// <param name="TEMP_HOADONHAPKHOCHITIET"></param>
        /// <returns></returns>
        public bool Cmd_XoaTEMP_HOADONHAPKHOCHITIET(TEMP_HOADONHAPKHOCHITIET obj, IDbTransaction trans)
        {
			bool bKQ = false;
			bKQ = Delete(dbConnection, trans, obj);
			if(bKQ) _ErrMsg ="Xóa TEMP_HOADONHAPKHOCHITIET thành công!";
			else  _ErrMsg ="Xóa TEMP_HOADONHAPKHOCHITIET thất bại!";    
            return bKQ;
        }
		#endregion
    }
}